package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 项目实体类
 * 对应数据库表：t_project
 * 存储客户装修项目的基本信息，包括项目详情、客户信息、进度状态等
 */
@Data
@TableName("t_project") // 指定对应的数据库表名
public class Project {

    /**
     * 主键ID
     * 自增主键，唯一标识一个项目记录
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 项目编号
     * 项目的唯一业务编号，非空且唯一
     */
    @TableField("project_no")
    private String projectNo;

    /**
     * 项目名称
     * 项目的具体名称，非空
     */
    @TableField("project_name")
    private String projectName;

    /**
     * 客户名称
     * 项目所属客户的姓名，非空
     */
    @TableField("customer_name")
    private String customerName;

    /**
     * 联系电话
     * 客户的联系电话，用于沟通联系，非空
     */
    @TableField("phone")
    private String phone;

    /**
     * 性别
     * 客户性别：0-未知，1-男，2-女，默认0
     */
    @TableField("gender")
    private Integer gender;

    /**
     * 设计师ID
     * 负责该项目的设计师ID，关联设计师表
     */
    @TableField("designer_id")
    private Long designerId;

    /**
     * 设计师姓名
     * 负责该项目的设计师姓名
     */
    @TableField("designer_name")
    private String designerName;

    /**
     * 省份
     * 项目所在省份，非空
     */
    @TableField("province")
    private String province;

    /**
     * 城市
     * 项目所在城市，非空
     */
    @TableField("city")
    private String city;

    /**
     * 区/县
     * 项目所在区/县，非空
     */
    @TableField("district")
    private String district;

    /**
     * 小区名称
     * 项目所在小区名称，非空
     */
    @TableField("community_name")
    private String communityName;

    /**
     * 详细地址
     * 项目的具体详细地址，非空
     */
    @TableField("detail_address")
    private String detailAddress;

    /**
     * 是否绑定H5账号
     * 0-否，1-是，默认0
     * 标识客户是否绑定了H5移动端账号
     */
    @TableField("bind_h5_account")
    private Integer bindH5Account;

    /**
     * H5用户ID
     * 绑定的H5账号用户ID，绑定后才有值
     */
    @TableField(value = "h5_user_id", updateStrategy = FieldStrategy.IGNORED)
    private Long h5UserId;

    /**
     * H5用户名
     * 绑定的H5账号用户名
     */
    @TableField("h5_user_name")
    private String h5UserName;

    /**
     * 客户来源
     * 1-线上，2-线下，非空
     * 标识客户是通过线上渠道还是线下渠道获取
     */
    @TableField("customer_source")
    private Integer customerSource;

    /**
     * 项目类型
     * 1-毛坯装修，2-老房改建，3-精装改造，4-别墅设计，5-其他，非空
     * 标识项目的具体类型
     */
    @TableField("project_type")
    private Integer projectType;

    /**
     * 业务类型
     * 1-内部员工，2-线上客户，3-线下客户，非空
     * 标识业务的来源类型
     */
    @TableField("business_type")
    private Integer businessType;

    /**
     * 是否期房
     * 0-否，1-是，默认0，非空
     * 标识该房产是否为期房
     */
    @TableField("is_future_house")
    private Integer isFutureHouse;

    /**
     * 期房日期
     * 期房的交房日期，仅当is_future_house为1时有值
     */
    @TableField("future_house_date")
    private LocalDate futureHouseDate;

    /**
     * 户型
     * 房屋的户型描述，如"三室一厅"等
     */
    @TableField("house_type")
    private String houseType;

    /**
     * 房型
     * 1-独栋别墅（可扩展其他类型）
     * 标识房屋的类型
     */
    @TableField("house_style")
    private Integer houseStyle;

    /**
     * 建筑面积(㎡)
     * 房屋的建筑面积，保留两位小数，非空
     */
    @TableField("building_area")
    private BigDecimal buildingArea;

    /**
     * 实用面积(㎡)
     * 房屋的实际使用面积，保留两位小数，非空
     */
    @TableField("practical_area")
    private BigDecimal practicalArea;

    /**
     * 是否已加微信
     * 0-否，1-是，默认0
     * 标识是否已添加客户微信
     */
    @TableField("has_wechat")
    private Integer hasWechat;

    /**
     * 微信号
     * 客户的微信号，已添加微信时填写
     */
    @TableField("wechat_no")
    private String wechatNo;

    /**
     * 施工项目ID
     * 关联的施工项目ID，有施工项目时才存在
     */
    @TableField("construction_project_id")
    private Long constructionProjectId;

    /**
     * 施工项目名称
     * 关联的施工项目名称
     */
    @TableField("construction_project_name")
    private String constructionProjectName;

    /**
     * 设计项目ID
     * 关联的设计项目ID，有设计项目时才存在
     */
    @TableField("design_project_id")
    private Long designProjectId;

    /**
     * 设计项目名称
     * 关联的设计项目名称
     */
    @TableField("design_project_name")
    private String designProjectName;

    /**
     * 备注
     * 项目的其他补充说明信息
     */
    @TableField("remark")
    private String remark;

    /**
     * 所处进度
     * 1-上门，2-量房，3-设计，4-报价，5-合同，6-施工，7-完工，8-结单
     * 标识项目当前所处的阶段
     */
    @TableField("progress")
    private Integer progress;

    /**
     * 跟进状态
     * 1-已加微信，2-一次电话跟进，3-二次电话跟进，4-基础在施，5-主材在施，
     * 6-基础售后，7-症状售后，8-待跟进，9-跟进中，10-已延期，11-已暂停
     * 标识项目的跟进状态
     */
    @TableField("follow_status")
    private Integer followStatus;

    /**
     * 最新进展记录
     * 记录项目的最新进展情况
     */
    @TableField("latest_record")
    private String latestRecord;

    /**
     * 创建时间
     * 记录创建的时间，默认当前时间
     */
    @TableField(value = "create_time")
    private LocalDateTime createTime;

    /**
     * 更新时间
     * 记录最后更新的时间，自动更新
     */
    @TableField(value = "update_time")
    private LocalDateTime updateTime;

    /**
     * 创建人
     * 创建该记录的用户ID
     */
    @TableField(value = "create_by")
    private Long createBy;

    /**
     * 更新人
     * 最后更新该记录的用户ID
     */
    @TableField(value = "update_by")
    private Long updateBy;

    /**
     * 是否删除
     * 0-否，1-是，默认0
     * 逻辑删除标识，MyBatis-Plus自动处理
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;
}